package vip.liux.contracts.infrastructure.websocket.sender;


import vip.liux.core.utils.JsonUtils;

/**
 * WebSocket 消息的发送器接口
 *
 * @author 芋道源码
 */
public interface WebSocketMessageSender {

    /**
     * 发送消息给指定用户
     *
     * @param tenantId       用户类型
     * @param userId         用户编号
     * @param messageType    消息类型
     * @param messageContent 消息内容，JSON 格式
     */
    void send(String tenantId, Long userId, String messageType, String messageContent);

    /**
     * 发送消息给指定用户类型
     *
     * @param tenantId       用户类型
     * @param messageType    消息类型
     * @param messageContent 消息内容，JSON 格式
     */
    void send(String tenantId, String messageType, String messageContent);

    /**
     * 发送消息给指定 Session
     *
     * @param sessionId      Session 编号
     * @param messageType    消息类型
     * @param messageContent 消息内容，JSON 格式
     */
    void sendBySession(String sessionId, String messageType, String messageContent);

    default void sendObject(String tenantId, Long userId, String messageType, Object messageContent) {
        send(tenantId, userId, messageType, JsonUtils.toJson(messageContent));
    }

    default void sendObject(String tenantId, String messageType, Object messageContent) {
        send(tenantId, messageType, JsonUtils.toJson(messageContent));
    }

    default void sendObjectSession(String sessionId, String messageType, Object messageContent) {
        sendBySession(sessionId, messageType, JsonUtils.toJson(messageContent));
    }

}